package com.terrace.db.system.service;

import java.util.List;

import com.terrace.db.system.mapper.entity.Organization;
import com.terrace.db.system.mapper.entity.Role;
import com.terrace.db.system.mapper.entity.User;
import com.terrace.core.common.model.UserInfo;
import com.terrace.core.mybatis.entity.Pagination;

/**
 * 用户Service
 * @author jiangyg
 *
 */
public interface UserService {
	
	/**
	 * 新增用户
	 * @param user
	 * @return
	 */
	public int saveUserSelective(User user);
	
	/**
	 * 删除用户
	 * @param userId
	 * @return
	 */
	public int deleteUserById(String userId);
	
	/**
	 * 修改用户信息
	 * @param user
	 * @return
	 */
	public int updateUserSelectiveById(User user);
	
	/**
	 * 根据id获取用户信息
	 * @param userId
	 * @return
	 */
	public User selectUserById(String userId);
	
	/**
	 * 根据用户账号查询用户信息
	 * @param userAccount
	 * @return
	 */
	public User selectUserByAccount(String userAccount);
	
	/**
	 * 根据用户id查询权限
	 * @param userId
	 * @return
	 */
	public List<Role> selectRoleByUserId(String userId);
	
	/**
	 * 根据账号查询用户详情信息
	 * @param userAccount
	 * @return
	 */
	public UserInfo selectUserInfoByAccount(String userAccount);
	
	/**
	 * 分页查询
	 * @param pagination
	 * @param user
	 * @return
	 */
	public Pagination<User> selectUserForPagination(Pagination<User> pagination, User user);
	
	/**
	 * 角色下的用户信息分页查询
	 * @param pagination
	 * @param user
	 * @param role
	 * @return
	 */
	public Pagination<User> selectUsersInRoleForPagination(Pagination<User> pagination, User user, Role role);
	
	/**
	 * 在角色下不存在的用户列表分页查询
	 * @param pagination
	 * @param roleId
	 * @param user
	 * @return
	 */
	public Pagination<User> selectNonExistUsersInRoleForPagination(Pagination<User> pagination, String roleId, User user);
	
	/**
	 * 组织下的用户信息分页查询
	 * @param pagination
	 * @param user
	 * @param org
	 * @return
	 */
	public Pagination<User> selectUsersInOrgForPagination(Pagination<User> pagination, User user, Organization org);
	
	/**
	 * 未指定组织的用户信息分页查询
	 * @param pagination
	 * @param user
	 * @return
	 */
	public Pagination<User> selectUsersNotInOrgForPagination(Pagination<User> pagination, User user);
	
}
